// 文章管理

const express = require('express')
const router = express.Router()

// 导入需要的处理函数模块
const article_handler = require('../router_handler/article')

const multer = require('multer')//解析 multipart/form-data 格式的请求体数据
const path = require('path')//导入处理路径的核心模块

// 生成随机数
function generateRandomNumber(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}
// 方1：
let uploadFolder = path.join(__dirname, '../uploads')
// 2. 设置磁盘存贮
let storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, uploadFolder); // 他会放在当前目录下的 /upload 文件夹下（没有该文件夹，就新建一个）
    },
    filename: function (req, file, cb) { // 在这里设定文件名
        let type = file.originalname.replace(/.+\./, ".")
        cb(null, Date.now() + generateRandomNumber(1, 100) + type); // file.originalname是将文件名设置为上传时的文件名，file中携带的
        // cb(null, Date.now() + '-' + file.originalname) // 加上Date.now()可以避免命名重复
    }
})
let uploads = multer({ storage: storage });
//方2： 创建 multer 的实例对象，通过 dest 属性指定文件的存放路径
// const uploads = multer({ dest: path.join(__dirname, '../uploads') })

// 导入验证数据的中间件
const expressJoi = require('@escook/express-joi')

// 导入需要的验证规则对象
const { add_article_schema, get_articleById_schema, delete_schema, update_article_schema, } = require('../schema/article')

// 发布新文章的路由
// upload.single() 是一个局部生效的中间件，用来解析 FormData 格式的表单数据
// 将文件类型的数据，解析并挂载到 req.file 属性中
// 将文本类型的数据，解析并挂载到 req.body 属性中
router.post('/add', uploads.single('cover_img'), expressJoi(add_article_schema), article_handler.addArticle)

// 获取文章的列表数据
router.get('/list', article_handler.getArticle)

//根据Id查询文章
router.get('/:Id', expressJoi(get_articleById_schema), article_handler.getArticleById)

//根据ID删除文章的路由
router.get('/delete/:Id', expressJoi(delete_schema), article_handler.deleteById)

//更新文章的路由
router.post('/edit', uploads.single('cover_img'), expressJoi(update_article_schema), article_handler.editArticle)
module.exports = router
